package javaApi.writeFile;


import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.IOException;
import java.net.URI;

public class HadoopWriteFile {
    public static void main(String[] args) throws IOException {
        // 从命令行读取第一个参数，作为此次文件处理的对象
        // hdfs://niit-master:9000/user/niit/
        String uri = args[0];
//        uri = "hdfs://niit-master:9000/user/niit";
//        uri = "hdfs://niit-master:9000/user/";
//        uri = "hdfs://niit-master:9000/";
        // 从core-site-default.xml中读取所有的Hadoop配置信息
        // 并从core-site.xml中覆盖相同的内容
        Configuration conf = new Configuration();

        //URI.create(uri):创建了一个URI的对象，用来指向特定的资源地址
        // get():基于配置信息，获取uri指定的那个资源
        // fs：可以操作uri指定的资源的对象---文件系统对象
        FileSystem fs = FileSystem.get(URI.create(uri), conf);

        // 写入流的信息是比特数组
        // string类自带了从文本到字节数组的互相转换
        byte[] file_content_buff = "hello hadoop world,test write file !\n".getBytes();

        // 将输出流写出到的目标文件
        // 这里的路径是一个相对路径
        Path dfs = new Path("/user/niit/test.txt");//写入文件路径

        // 为写出到文件，创建一个输出流对象
        // 输出流的目标已经通过path变量指定
        FSDataOutputStream outputStream = fs.create(dfs);

        // 调用输出流的write方法，将要写出的内容以字节数组的形式写出到文件
        outputStream.write(file_content_buff, 0, file_content_buff.length);

        // 关闭输出流
        outputStream.close();
    }
}
